<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

// console.log(undefined.valueOf());//错误
// console.log(null.valueOf());//错误

console.log(true.valueOf());//true
console.log(typeof true.valueOf());//'boolean'
console.log(false.valueOf());//false
console.log(typeof false.valueOf());//'boolean'
console.log(Boolean.valueOf());//Boolean() { [native code] }
console.log(typeof Boolean.valueOf());//'function'

// 如何判断⼀个对象是空对象
let obj = {}

// 1 JSON.stringify(obj)
if(JSON.stringify(obj) == '{}'){
    console.log('空对象');
}
// 2 Object.keys(obj).length 
console.log('111',Object.keys(obj).length);
if(Object.keys(obj).length == 0){
console.log('空对象');

}

// call()、apply()、bind()等⽅法不能改变箭头函数中this的指向
var id = 'Global';
let fun1 = () => {
console.log(this.id)
};

fun1(); // 'Global'
fun1.call({id: 'Obj'}); // 'Global'
fun1.apply({id: 'Obj'}); // 'Global'
fun1.bind({id: 'Obj'})(); // 'Global'

let fun2 = function(){
console.log(this.id)
};
fun2(); // 'Global'
fun2.call({id: 'Obj'}); // 'Obj'
fun2.apply({id: 'Obj'}); // 'Obj'
fun2.bind({id: 'Obj'})(); // 'Obj'

// 箭头函数不能作为构造函数使⽤
// 构造函数在new的步骤在上⾯已经说过了，实际上第⼆步就是将函数中的this指向该对象。 但是由于箭
// 头函数时没有⾃⼰的this的，且this指向外层的执⾏环境，且不能改变指向，所以不能当做构造函数使
// ⽤。
// （6）箭头函数没有⾃⼰的arguments
// 箭头函数没有⾃⼰的arguments对象。在箭头函数中访问arguments实际上获得的是它外层函数的
// arguments值。
// （7）箭头函数没有prototype

</script>
</body>
</html>